package field

import "gitee.com/yanwc/net/utils"

type (
	Longitude    float64
	LongitudeRaw [4]byte // 经度 WGS84坐标系, 单位:0.000001°
	Latitude     float64
	LatitudeRaw  [4]byte // 纬度 WGS84坐标系, 单位:0.000001°
)

const (
	LngLatUnit  float64 = 0.000001 // 度
	LngLatRatio float64 = 1000000
)

func (lng LongitudeRaw) Type() Longitude {
	v := utils.BytesToNumber[uint32](lng[:])
	return Longitude(utils.Decimal(float64(v)*LngLatUnit, 6))
}

func (lng Longitude) Raw() (out LongitudeRaw) {
	t := float64(lng) * LngLatRatio
	copy(out[:], utils.NumberToBytesWithBigEndian[uint32](uint32(t)))
	return
}

func (lat LatitudeRaw) Type() Latitude {
	v := utils.BytesToNumber[uint32](lat[:])

	return Latitude(utils.Decimal(float64(v)*LngLatUnit, 6))
}

func (lat Latitude) Raw() (out LatitudeRaw) {
	v := uint32(float64(lat) * LngLatRatio)
	copy(out[:], utils.NumberToBytesWithBigEndian[uint32](v))
	return
}

func (lat LatitudeRaw) Slice() []byte {
	return lat[:]
}

func (lng LongitudeRaw) Slice() []byte {
	return lng[:]
}
